package yf.platform.dao;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.mybatis.spring.SqlSessionTemplate;

public interface DaoSupport {
	/**
	 * 可通过spring设置sqlSessionTemplate
	 * @param sqlSessionTemplate
	 */
	public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate);

	public  <T> List<T> desc(String table);
	
	public  <T> List<T> table(); 
	
	public void beginTransaction();
	
	public void commit();
	
	public void runScript(String path) throws IOException;
	
	public void rollback();
	/**
	 * 可执行原生的sql
	 * @param sql
	 * @return
	 */
	public int execute(String sql);
	
	/**
	 * 向数据库中填入单一数据
	 * @param id mapper中的ID
	 * @param e
	 */
	public <T> int insert(T e, String id);
	
	@SuppressWarnings("rawtypes")
	public int insert(String table_name, Map... es);
	
	public int delete(String table, String condition);
	
	/**
	 * 更新数据
	 * @param id
	 * @param e
	 */
	public <T> int update(String id, T e);
	
	public int update(Map<String, String> e, String condition, String table);
	
	/**
	 * 获取单一数据
	 * @param id
	 * @param e
	 * @return
	 */
	public <T> T findOne(String id, Object param);

	/**
	 * 获取单一数据
	 * @param table_name
	 * @param fields
	 * @param condition
	 * @return
	 */
	public <T> T findOne(String table_name, String fields, String condition);
	
	/**
	 * 获取数据集
	 * @param id
	 * @param e
	 * @return
	 */
	public <T> List<T> find(String id, Object param);
	
	
	public <T> List<T> find(String sql);
	
	
	public <T> List<T> find(String table_name, String fields, String condition, String order);
	
	/**
	 * 分页的方式获取数据集
	 * @param id
	 * @param e
	 * @param page 当前的页码
	 * @param max 每页需要显示的行数
	 * @return
	 */
	public <T> List<T> findByPage(String id, Object param, int page, int max);

	public <T> List<T> findByPage(String table_name, String fields, String condition, String orderint, int page, int max);
	
	
	public <T> List<T> injoin(String tables, String fields, String condition, String order);
	
	public <T> List<T> injoin(String tables, String fields, String condition, String order, int max, int page);
}
